/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import java.util.List;
import model.ServerInfo;
import xmlreader.ServerInfoReader;
import xmlwriter.ServerInfoWriter;

/**
 *
 * @author Oscar
 */
public class ServerDAO {


    private static ServerDAO instance = null;
    public List<ServerInfo> Servers;

    
    private ServerDAO() {
        
        load();
    }

    public static ServerDAO getInstance()
    {
        if (instance == null)
            instance = new ServerDAO();

        return instance;
    }

    /**
     * Devuelve la lista con todos los servidores
     * @return List de ServerInfo
     */
    public List<ServerInfo> getAll() {

        return this.Servers;
    }

    /**
     * Verifica que un servidor este registrado
     *
     * @param nickname Nombre de usuario
     * @param password Clave de un Usuario
     * @return
     */
    public boolean exist(String name, String ip) {

        for (ServerInfo ServerInfo : this.Servers) {

            if (ServerInfo.getName().equalsIgnoreCase(name)
                    && ServerInfo.getIp().equalsIgnoreCase(ip)) {

                return true;
            }

        }

        return false;
    }

    /**
     * Elimina un usuario
     *
     * @param nickname Nombre de usuario
     * @param password Clave de un Usuario
     * @return
     */
    public void Delete(String name, String ip) {

        this.Servers.remove(new ServerInfo(name,ip));
    }

    /**
     * Crea un usuario nuevo
     *
     * @param nickname Nombre de usuario
     * @param password Clave de un Usuario
     */
    public void createServer(String name, String ip) {

        this.Servers.add(new ServerInfo(name, ip));
    }

    /**
     * Guarda los cambios hechos
     */
    public void commit() {

        //writing xml file

        ServerInfoWriter writer = new ServerInfoWriter();

        writer.setFile("servers.xml");

        try{

            writer.saveConfig(this.Servers);
        }
        catch(Exception e) {

        }
    }

    /**
     * Carga los Datos para tenerlos disponibles
     */
    public void load() {

        //reading xml file
        ServerInfoReader reader = new ServerInfoReader();

        this.Servers = reader.readConfig("servers.xml");
    }
    
}
